home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_04 / saks / lns2a.cpp < prev    next >
C/C++ Source or Header  |  1994-02-09  |  1KB  |  90 lines

  1.  
  2. ----------
  3.  
  4. Listing 10 - The Cheshire Cat implementation for lns using a single 
  5. pointer
  6.  
  7. //
  8. // lns2a.cpp - line number sequence implementation
  9. //
  10. #include <stdio.h>
  11.  
  12. #include "lns.h"
  13.  
  14. class lns::details
  15.     {
  16. public:
  17.     details(unsigned n);
  18.     ~details();
  19.     void add(unsigned n);
  20.     void print();
  21. private:
  22.     class node;
  23.     node *first;
  24.     };
  25.  
  26. class lns::details::node
  27.     {
  28. public:
  29.     node(unsigned n);
  30.     unsigned number;
  31.     node *next;
  32.     };
  33.  
  34. inline lns::details::node::node(unsigned n)
  35.     : number(n), next(0)
  36.     {
  37.     }
  38.  
  39. inline lns::details::details(unsigned n)
  40.     {
  41.     first = new node(n);
  42.     }
  43.  
  44. lns::details::~details()
  45.     {
  46.     node *p;
  47.     while ((p = first) != 0)
  48.         {
  49.         first = first->next;
  50.         delete p;
  51.         }
  52.     }
  53.  
  54. void lns::details::add(unsigned n)
  55.     {
  56.     node *p = first;
  57.     while (p->next != 0 && p->number != n)
  58.         p = p->next;
  59.     if (p->number != n)
  60.         p = p->next = new node(n);
  61.     }
  62.  
  63. void lns::details::print()
  64.     {
  65.     node *p;
  66.     for (p = first; p != 0; p = p->next)
  67.         printf("%4d ", p->number);
  68.     }
  69.  
  70. lns::lns(unsigned n)
  71.     {
  72.     dp = new details(n);
  73.     }
  74.  
  75. lns::~lns()
  76.     {
  77.     delete dp;
  78.     }
  79.  
  80. void lns::add(unsigned n)
  81.     {
  82.     dp->add(n);
  83.     }
  84.  
  85. void lns::print()
  86.     {
  87.     dp->print();
  88.     }
  89.  
  90.